home *** CD-ROM | disk | FTP | other *** search
/ Champak 54 / Vol 54.iso / games / ultrablo.swf / scripts / frame_2 / DoAction.as
Encoding:
Text File  |  2007-10-01  |  21.6 KB  |  782 lines

  1. stop();
  2. btn_logo.onRelease = function()
  3. {
  4.    getUrl("http://www.gamegecko.com", "_blank");
  5. };
  6. _quality = "HIGH";
  7. _global.core = this;
  8. feedback.swapDepths(100);
  9. prompter.swapDepths(101);
  10. instructions.swapDepths(102);
  11. xStart = 175;
  12. yStart = 10;
  13. this.createEmptyMovieClip("so_newline",200);
  14. this.createEmptyMovieClip("so_skull",201);
  15. this.createEmptyMovieClip("so_doubleskull",202);
  16. this.createEmptyMovieClip("so_success",203);
  17. this.createEmptyMovieClip("so_timer",204);
  18. s_newline = new Sound(so_newline);
  19. s_newline.setVolume(30);
  20. s_newline.attachSound("newlineMP3");
  21. s_skull = new Sound(so_skull);
  22. s_skull.attachSound("skullMP3");
  23. s_doubleskull = new Sound(so_doubleskull);
  24. s_doubleskull.attachSound("doubleskullMP3");
  25. s_success = new Sound(so_success);
  26. s_success.setVolume(30);
  27. s_success.attachSound("successMP3");
  28. s_timer = new Sound(so_timer);
  29. s_timer.attachSound("timerMP3");
  30. _global.EventBroadcaster = new Object();
  31. EventBroadcaster.initialize = function(obj)
  32. {
  33.    var _loc1_ = obj;
  34.    var _loc2_ = this;
  35.    _loc1_._listeners = new Array();
  36.    _loc1_.broadcastMessage = _loc2_._broadcastMessage;
  37.    _loc1_.addListener = _loc2_._addListener;
  38.    _loc1_.removeListener = _loc2_._removeListener;
  39. };
  40. EventBroadcaster._broadcastMessage = function()
  41. {
  42.    var eventName = arguments.shift();
  43.    var _loc2_ = this._listeners;
  44.    var _loc3_ = _loc2_.length;
  45.    var _loc1_ = 0;
  46.    while(_loc1_ < _loc3_)
  47.    {
  48.       _loc2_[_loc1_][eventName].apply(_loc2_[_loc1_],arguments);
  49.       _loc1_ = _loc1_ + 1;
  50.    }
  51. };
  52. EventBroadcaster._addListener = function(obj)
  53. {
  54.    this.removeListener(obj);
  55.    this._listeners.push(obj);
  56.    return true;
  57. };
  58. EventBroadcaster._removeListener = function(obj)
  59. {
  60.    var _loc3_ = obj;
  61.    var _loc2_ = this._listeners;
  62.    var _loc1_ = _loc2_.length;
  63.    while(true)
  64.    {
  65.       _loc1_;
  66.       if(!_loc1_--)
  67.       {
  68.          break;
  69.       }
  70.       if(_loc2_[_loc1_] == _loc3_)
  71.       {
  72.          _loc2_.splice(_loc1_,1);
  73.          return true;
  74.       }
  75.    }
  76.    return false;
  77. };
  78. _global.Model = function(width, height, numOptions)
  79. {
  80.    var _loc2_ = this;
  81.    var _loc3_ = width;
  82.    _loc2_.width = _loc3_;
  83.    _loc2_.height = height;
  84.    _loc2_.numOptions = numOptions;
  85.    _loc2_.board = new Array();
  86.    var _loc1_ = 0;
  87.    while(_loc1_ < height)
  88.    {
  89.       _loc2_.board[_loc1_] = new Array();
  90.       j = 0;
  91.       while(j < _loc3_)
  92.       {
  93.          _loc2_.board[_loc1_][j] = new Object();
  94.          _loc2_.board[_loc1_][j].id = _loc1_ * _loc2_.height + j;
  95.          _loc2_.board[_loc1_][j].x = j;
  96.          _loc2_.board[_loc1_][j].y = _loc1_;
  97.          j++;
  98.       }
  99.       _loc1_ = _loc1_ + 1;
  100.    }
  101.    EventBroadcaster.initialize(_loc2_);
  102. };
  103. Model.prototype.reset = function(level)
  104. {
  105.    var _loc1_ = this;
  106.    var i;
  107.    var _loc2_ = undefined;
  108.    var type;
  109.    var _loc3_ = new Object();
  110.    var initHeight = level >= 5 ? 8 : 3 + level;
  111.    var i = 0;
  112.    while(i < _loc1_.height - initHeight)
  113.    {
  114.       _loc2_ = 0;
  115.       while(_loc2_ < _loc1_.width)
  116.       {
  117.          type = null;
  118.          _loc3_[_loc1_.board[i][_loc2_].id] = {x:_loc2_,y:i,type:type};
  119.          _loc1_.board[i][_loc2_].type = type;
  120.          _loc2_ = _loc2_ + 1;
  121.       }
  122.       i++;
  123.    }
  124.    var i = _loc1_.height - initHeight;
  125.    while(i < _loc1_.height)
  126.    {
  127.       _loc2_ = 0;
  128.       while(_loc2_ < _loc1_.width)
  129.       {
  130.          type = Math.floor(Math.random() * _loc1_.numOptions);
  131.          _loc3_[_loc1_.board[i][_loc2_].id] = {x:_loc2_,y:i,type:type};
  132.          _loc1_.board[i][_loc2_].type = type;
  133.          _loc2_ = _loc2_ + 1;
  134.       }
  135.       i++;
  136.    }
  137.    _loc1_.nextRow = [];
  138.    var i = 0;
  139.    while(i < _loc1_.width)
  140.    {
  141.       var bombrnd = !!random(100) ? 0 : _loc1_.numOptions;
  142.       var type = random(_loc1_.numOptions) + bombrnd;
  143.       _loc1_.nextRow.push(type);
  144.       i++;
  145.    }
  146.    _loc1_.broadcastMessage("showNext",_loc1_.nextRow);
  147.    _loc1_.broadcastMessage("onUpdate",_loc3_);
  148. };
  149. Model.prototype.remove = function(x, y)
  150. {
  151.    removeHelper = function(x, y, type)
  152.    {
  153.       var _loc2_ = x;
  154.       var _loc3_ = y;
  155.       var _loc1_ = 0;
  156.       if(board[_loc3_ + 1][_loc2_].type == type)
  157.       {
  158.          board[_loc3_ + 1][_loc2_].type = null;
  159.          updates[board[_loc3_ + 1][_loc2_].id] = {x:_loc2_,y:_loc3_ + 1,type:null};
  160.          _loc1_ = _loc1_ + 1;
  161.          if(cols[_loc2_] == null || _loc3_ + 1 > cols[_loc2_])
  162.          {
  163.             cols[_loc2_] = _loc3_ + 1;
  164.          }
  165.          _loc1_ += removeHelper(_loc2_,_loc3_ + 1,type);
  166.       }
  167.       if(board[_loc3_ - 1][_loc2_].type == type)
  168.       {
  169.          board[_loc3_ - 1][_loc2_].type = null;
  170.          updates[board[_loc3_ - 1][_loc2_].id] = {x:_loc2_,y:_loc3_ - 1,type:null};
  171.          _loc1_ = _loc1_ + 1;
  172.          if(cols[_loc2_] == null || _loc3_ - 1 > cols[_loc2_])
  173.          {
  174.             cols[_loc2_] = _loc3_ - 1;
  175.          }
  176.          _loc1_ += removeHelper(_loc2_,_loc3_ - 1,type);
  177.       }
  178.       if(board[_loc3_][_loc2_ + 1].type == type)
  179.       {
  180.          board[_loc3_][_loc2_ + 1].type = null;
  181.          updates[board[_loc3_][_loc2_ + 1].id] = {x:_loc2_ + 1,y:_loc3_,type:null};
  182.          _loc1_ = _loc1_ + 1;
  183.          if(cols[_loc2_ + 1] == null || _loc3_ > cols[_loc2_ + 1])
  184.          {
  185.             cols[_loc2_ + 1] = _loc3_;
  186.          }
  187.          _loc1_ += removeHelper(_loc2_ + 1,_loc3_,type);
  188.       }
  189.       if(board[_loc3_][_loc2_ - 1].type == type)
  190.       {
  191.          board[_loc3_][_loc2_ - 1].type = null;
  192.          updates[board[_loc3_][_loc2_ - 1].id] = {x:_loc2_ - 1,y:_loc3_,type:null};
  193.          _loc1_ = _loc1_ + 1;
  194.          if(cols[_loc2_ - 1] == null || _loc3_ > cols[_loc2_ - 1])
  195.          {
  196.             cols[_loc2_ - 1] = _loc3_;
  197.          }
  198.          _loc1_ += removeHelper(_loc2_ - 1,_loc3_,type);
  199.       }
  200.       return _loc1_;
  201.    };
  202.    var _loc1_ = undefined;
  203.    var _loc2_ = undefined;
  204.    var _loc3_ = undefined;
  205.    var total = 0;
  206.    var board = this.board;
  207.    var cols = new Object();
  208.    var updates = new Object();
  209.    var skipper;
  210.    var type = board[y][x].type;
  211.    board[y][x].type = null;
  212.    cols[x] = y;
  213.    total = removeHelper(x,y,type);
  214.    if(total > 1)
  215.    {
  216.       core.s_success.start(0,1);
  217.       this.broadcastMessage("updateScore",total);
  218.       updates[board[y][x].id] = {x:x,y:y,type:null};
  219.       for(_loc2_ in cols)
  220.       {
  221.          skipper = 1;
  222.          _loc1_ = cols[_loc2_];
  223.          _loc3_ = _loc1_ - 1;
  224.          while(_loc3_ > -1)
  225.          {
  226.             if(board[_loc3_][_loc2_].type == null)
  227.             {
  228.                skipper++;
  229.             }
  230.             else
  231.             {
  232.                updates[board[_loc3_ + skipper][_loc2_].id].type = board[_loc3_][_loc2_].type;
  233.                board[_loc3_ + skipper][_loc2_].type = board[_loc3_][_loc2_].type;
  234.                updates[board[_loc3_][_loc2_].id] = {x:_loc2_,y:_loc3_,type:null};
  235.                board[_loc3_][_loc2_].type = null;
  236.             }
  237.             _loc3_ = _loc3_ - 1;
  238.          }
  239.       }
  240.       var emptyCols = [];
  241.       _loc2_ = 0;
  242.       while(_loc2_ < this.width)
  243.       {
  244.          var rem = 0;
  245.          _loc1_ = 0;
  246.          while(_loc1_ < this.height)
  247.          {
  248.             if(board[_loc1_][_loc2_].type == null || board[_loc1_][_loc2_].type == undefined)
  249.             {
  250.                rem++;
  251.             }
  252.             _loc1_ = _loc1_ + 1;
  253.          }
  254.          if(rem == this.height)
  255.          {
  256.             emptyCols.push(_loc2_);
  257.          }
  258.          _loc2_ = _loc2_ + 1;
  259.       }
  260.       var k = 0;
  261.       while(k < emptyCols.length)
  262.       {
  263.          if(emptyCols[k] < this.width / 2)
  264.          {
  265.             _loc2_ = emptyCols[k];
  266.             while(_loc2_ >= 0)
  267.             {
  268.                _loc1_ = 0;
  269.                while(_loc1_ < this.height)
  270.                {
  271.                   updates[board[_loc1_][_loc2_].id] = {x:board[_loc1_][_loc2_].x,y:board[_loc1_][_loc2_].y,type:board[_loc1_][_loc2_ - 1].type};
  272.                   board[_loc1_][_loc2_].type = board[_loc1_][_loc2_ - 1].type;
  273.                   _loc1_ = _loc1_ + 1;
  274.                }
  275.                _loc2_ = _loc2_ - 1;
  276.             }
  277.          }
  278.          else
  279.          {
  280.             _loc2_ = emptyCols[k];
  281.             while(_loc2_ <= this.width)
  282.             {
  283.                _loc1_ = 0;
  284.                while(_loc1_ < this.height)
  285.                {
  286.                   updates[board[_loc1_][_loc2_].id] = {x:board[_loc1_][_loc2_].x,y:board[_loc1_][_loc2_].y,type:board[_loc1_][_loc2_ + 1].type};
  287.                   board[_loc1_][_loc2_].type = board[_loc1_][_loc2_ + 1].type;
  288.                   _loc1_ = _loc1_ + 1;
  289.                }
  290.                _loc2_ = _loc2_ + 1;
  291.             }
  292.          }
  293.          k++;
  294.       }
  295.       this.broadcastMessage("onUpdate",updates);
  296.    }
  297.    else
  298.    {
  299.       core.s_skull.start(0,1);
  300.       for(n in updates)
  301.       {
  302.          board[updates[n].y][updates[n].x].type = type;
  303.       }
  304.       updates = new Object();
  305.       board[y][x].type = this.numOptions * 2;
  306.       updates[board[y][x].id] = {x:x,y:y,type:board[y][x].type};
  307.       this.broadcastMessage("onUpdate",updates);
  308.    }
  309. };
  310. Model.prototype.bomb = function(x, y)
  311. {
  312.    core.s_success.start(0,1);
  313.    var _loc1_ = this.board;
  314.    var _loc2_ = undefined;
  315.    var _loc3_ = undefined;
  316.    var z;
  317.    var total = 0;
  318.    var cols = new Object();
  319.    var updates = new Object();
  320.    var skipper;
  321.    var type = _loc1_[y][x].type;
  322.    cols[x] = y;
  323.    var k = 0;
  324.    while(k < this.height)
  325.    {
  326.       var l = 0;
  327.       while(l < this.width)
  328.       {
  329.          if(_loc1_[k][l].type == type - this.numOptions || _loc1_[k][l].type == type)
  330.          {
  331.             _loc1_[k][l].type = null;
  332.             updates[_loc1_[k][l].id] = {x:l,y:k,type:null};
  333.             if(cols[l] == null || k > cols[l])
  334.             {
  335.                cols[l] = k;
  336.             }
  337.             total++;
  338.          }
  339.          l++;
  340.       }
  341.       k++;
  342.    }
  343.    this.broadcastMessage("updateScore",total);
  344.    updates[_loc1_[y][x].id] = {x:x,y:y,type:null};
  345.    for(_loc3_ in cols)
  346.    {
  347.       skipper = 1;
  348.       _loc2_ = cols[_loc3_];
  349.       z = _loc2_ - 1;
  350.       while(z > -1)
  351.       {
  352.          if(_loc1_[z][_loc3_].type == null)
  353.          {
  354.             skipper++;
  355.          }
  356.          else
  357.          {
  358.             updates[_loc1_[z + skipper][_loc3_].id].type = _loc1_[z][_loc3_].type;
  359.             _loc1_[z + skipper][_loc3_].type = _loc1_[z][_loc3_].type;
  360.             updates[_loc1_[z][_loc3_].id] = {x:_loc3_,y:z,type:null};
  361.             _loc1_[z][_loc3_].type = null;
  362.          }
  363.          z--;
  364.       }
  365.    }
  366.    var emptyCols = [];
  367.    _loc3_ = 0;
  368.    while(_loc3_ < this.width)
  369.    {
  370.       var rem = 0;
  371.       _loc2_ = 0;
  372.       while(_loc2_ < this.height)
  373.       {
  374.          if(_loc1_[_loc2_][_loc3_].type == null || _loc1_[_loc2_][_loc3_].type == undefined)
  375.          {
  376.             rem++;
  377.          }
  378.          _loc2_ = _loc2_ + 1;
  379.       }
  380.       if(rem == this.height)
  381.       {
  382.          emptyCols.push(_loc3_);
  383.       }
  384.       _loc3_ = _loc3_ + 1;
  385.    }
  386.    var k = 0;
  387.    while(k < emptyCols.length)
  388.    {
  389.       if(emptyCols[k] < this.width / 2)
  390.       {
  391.          _loc3_ = emptyCols[k];
  392.          while(_loc3_ >= 0)
  393.          {
  394.             _loc2_ = 0;
  395.             while(_loc2_ < this.height)
  396.             {
  397.                updates[_loc1_[_loc2_][_loc3_].id] = {x:_loc1_[_loc2_][_loc3_].x,y:_loc1_[_loc2_][_loc3_].y,type:_loc1_[_loc2_][_loc3_ - 1].type};
  398.                _loc1_[_loc2_][_loc3_].type = _loc1_[_loc2_][_loc3_ - 1].type;
  399.                _loc2_ = _loc2_ + 1;
  400.             }
  401.             _loc3_ = _loc3_ - 1;
  402.          }
  403.       }
  404.       else
  405.       {
  406.          _loc3_ = emptyCols[k];
  407.          while(_loc3_ <= this.width)
  408.          {
  409.             _loc2_ = 0;
  410.             while(_loc2_ < this.height)
  411.             {
  412.                updates[_loc1_[_loc2_][_loc3_].id] = {x:_loc1_[_loc2_][_loc3_].x,y:_loc1_[_loc2_][_loc3_].y,type:_loc1_[_loc2_][_loc3_ + 1].type};
  413.                _loc1_[_loc2_][_loc3_].type = _loc1_[_loc2_][_loc3_ + 1].type;
  414.                _loc2_ = _loc2_ + 1;
  415.             }
  416.             _loc3_ = _loc3_ + 1;
  417.          }
  418.       }
  419.       k++;
  420.    }
  421.    this.broadcastMessage("onUpdate",updates);
  422. };
  423. Model.prototype.skull = function(x, y)
  424. {
  425.    var _loc3_ = this;
  426.    var _loc2_ = new Object();
  427.    var _loc1_ = _loc3_.board;
  428.    _loc1_[y][x].type = _loc3_.numOptions * 2 + 1;
  429.    _loc2_[_loc1_[y][x].id] = {x:x,y:y,type:_loc1_[y][x].type};
  430.    core.s_doubleskull.start(0,1);
  431.    _loc3_.broadcastMessage("onUpdate",_loc2_);
  432. };
  433. Model.prototype.getType = function(x, y)
  434. {
  435.    var _loc2_ = this;
  436.    var _loc1_ = _loc2_.board[y][x].type;
  437.    if(_loc1_ >= _loc2_.numOptions && _loc1_ < _loc2_.numOptions * 2)
  438.    {
  439.       return "bomb";
  440.    }
  441.    if(_loc1_ < _loc2_.numOptions)
  442.    {
  443.       return "block";
  444.    }
  445.    if(_loc1_ >= _loc2_.numOptions * 2)
  446.    {
  447.       return "skull";
  448.    }
  449. };
  450. Model.prototype.addRow = function()
  451. {
  452.    var _loc1_ = this;
  453.    core.s_newline.start(0,1);
  454.    var upD = new Object();
  455.    var _loc2_ = _loc1_.board;
  456.    var highRow = "begin";
  457.    var i = 0;
  458.    while(i < _loc1_.height - 1)
  459.    {
  460.       var _loc3_ = 0;
  461.       while(_loc3_ < _loc1_.width)
  462.       {
  463.          if(_loc2_[i + 1][_loc3_].type != null && highRow == "begin")
  464.          {
  465.             highRow = i;
  466.          }
  467.          upD[_loc2_[i][_loc3_].id] = {x:_loc2_[i][_loc3_].x,y:_loc2_[i][_loc3_].y,type:_loc2_[i + 1][_loc3_].type};
  468.          _loc2_[i][_loc3_].type = _loc2_[i + 1][_loc3_].type;
  469.          _loc3_ = _loc3_ + 1;
  470.       }
  471.       i++;
  472.    }
  473.    if(highRow == 0 && !_loc1_.endGame)
  474.    {
  475.       _loc1_.endGame = true;
  476.    }
  477.    else if(highRow == 0 && _loc1_.endGame)
  478.    {
  479.       _loc1_.broadcastMessage("gameOver");
  480.    }
  481.    _loc3_ = 0;
  482.    while(_loc3_ < _loc1_.width)
  483.    {
  484.       upD[_loc1_.board[_loc1_.height - 1][_loc3_].id] = {x:_loc3_,y:_loc1_.height - 1,type:_loc1_.nextRow[_loc3_]};
  485.       _loc2_[_loc1_.height - 1][_loc3_].type = _loc1_.nextRow[_loc3_];
  486.       _loc3_ = _loc3_ + 1;
  487.    }
  488.    _loc1_.nextRow = [];
  489.    var i = 0;
  490.    while(i < _loc1_.width)
  491.    {
  492.       var bombrnd = !!random(100) ? 0 : _loc1_.numOptions;
  493.       var type = random(_loc1_.numOptions) + bombrnd;
  494.       _loc1_.nextRow.push(type);
  495.       i++;
  496.    }
  497.    _loc1_.broadcastMessage("showNext",_loc1_.nextRow);
  498.    _loc1_.broadcastMessage("onUpdate",upD);
  499. };
  500. NUM_X = 10;
  501. NUM_Y = 15;
  502. CELL_WIDTH = 26;
  503. CELL_HEIGHT = 26;
  504. enabled = true;
  505. level = 1;
  506. score = 0;
  507. linesleft = 8;
  508. onUpdate = function(updates)
  509. {
  510.    var _loc1_ = this;
  511.    _loc1_.updates = updates;
  512.    _loc1_.countdown = FADE_NUM;
  513.    _loc1_.enabled = false;
  514.    for(var _loc2_ in _loc1_.updates)
  515.    {
  516.       cells[_loc1_.updates[_loc2_].y][_loc1_.updates[_loc2_].x]._alpha = 100;
  517.       if(_loc1_.updates[_loc2_].type != null)
  518.       {
  519.          cells[_loc1_.updates[_loc2_].y][_loc1_.updates[_loc2_].x].gotoAndStop(_loc1_.updates[_loc2_].type + 2);
  520.       }
  521.       else
  522.       {
  523.          cells[_loc1_.updates[_loc2_].y][_loc1_.updates[_loc2_].x].gotoAndStop(1);
  524.       }
  525.    }
  526.    _loc1_.enabled = true;
  527.    updateText();
  528. };
  529. showNext = function(next)
  530. {
  531.    var _loc2_ = next;
  532.    var _loc1_ = 0;
  533.    while(_loc1_ < _loc2_.length)
  534.    {
  535.       nextClips[_loc1_].gotoAndStop(_loc2_[_loc1_] + 2);
  536.       nextClips[_loc1_]._alpha = 30;
  537.       _loc1_ = _loc1_ + 1;
  538.    }
  539.    showCount = 0;
  540. };
  541. cellPress = function()
  542. {
  543.    var _loc1_ = this;
  544.    var _loc2_ = _loc1_._parent._parent.model.getType(_loc1_.x,_loc1_.y);
  545.    if(!_loc1_._parent._parent.paused && !_loc1_._parent._parent.halt)
  546.    {
  547.       if(_loc2_ == "block")
  548.       {
  549.          _loc1_._parent._parent.model.remove(_loc1_.x,_loc1_.y);
  550.       }
  551.       else if(_loc2_ == "bomb")
  552.       {
  553.          _loc1_._parent._parent.model.bomb(_loc1_.x,_loc1_.y);
  554.       }
  555.       else if(_loc2_ == "skull")
  556.       {
  557.          _loc1_._parent._parent.model.skull(_loc1_.x,_loc1_.y);
  558.          _loc1_._parent._parent.skullAdvance = true;
  559.          _loc1_._parent._parent.tick = _loc1_._parent._parent.tickDelay - 1;
  560.       }
  561.    }
  562. };
  563. init = function()
  564. {
  565.    var _loc1_ = undefined;
  566.    var num = 0;
  567.    this.grid_mc = this.createEmptyMovieClip("grid_mc",1);
  568.    this.grid_mc._x = 25;
  569.    this.grid_mc._y = 25;
  570.    this.cells = new Array();
  571.    var _loc3_ = 0;
  572.    while(_loc3_ < NUM_Y)
  573.    {
  574.       cells[_loc3_] = new Array();
  575.       var _loc2_ = 0;
  576.       while(_loc2_ < NUM_X)
  577.       {
  578.          _loc1_ = grid_mc.attachMovie("cell","cell" + num,num++);
  579.          _loc1_._x = xStart + _loc2_ * CELL_WIDTH;
  580.          _loc1_._y = yStart + _loc3_ * CELL_HEIGHT;
  581.          _loc1_.x = _loc2_;
  582.          _loc1_.y = _loc3_;
  583.          _loc1_.onPress = this.cellPress;
  584.          _loc1_.useHandCursor = false;
  585.          this.cells[_loc3_][_loc2_] = _loc1_;
  586.          _loc2_ = _loc2_ + 1;
  587.       }
  588.       _loc3_ = _loc3_ + 1;
  589.    }
  590.    nextClips = [];
  591.    _loc3_ = 0;
  592.    while(_loc3_ < NUM_Y)
  593.    {
  594.       nextClips[_loc3_] = grid_mc.attachMovie("cell","nextClip" + _loc3_,num++);
  595.       var nextMC = nextClips[_loc3_];
  596.       nextMC._x = xStart + _loc3_ * CELL_WIDTH;
  597.       nextMC._y = yStart + CELL_HEIGHT + NUM_Y * CELL_HEIGHT - 3;
  598.       _loc3_ = _loc3_ + 1;
  599.    }
  600.    this.model = new Model(NUM_X,NUM_Y,4);
  601.    this.model.addListener(this);
  602.    this.presenter = new Presenter(model,this);
  603.    this.model.reset(level);
  604.    updateText();
  605. };
  606. updateScore = function(scoreMult)
  607. {
  608.    score += 50 + scoreMult * 20;
  609.    updateText();
  610. };
  611. updateText = function()
  612. {
  613.    scoreText.text = score;
  614.    linesText.text = linesLeft;
  615.    levelText.text = level + 1;
  616. };
  617. updateTickDelay = function()
  618. {
  619.    return 120 - (level / 2 <= 10 ? level / 2 : 10) * 10;
  620. };
  621. var tick = 0;
  622. var tickDelay = updateTickDelay();
  623. var skullAdvance = false;
  624. var btwLevelDelayCount = 0;
  625. var btwLevelDelay = 90;
  626. halt = true;
  627. showCount = 0;
  628. mainLoop = function()
  629. {
  630.    var _loc1_ = this;
  631.    if(tick > showCount * (tickDelay / NUM_X))
  632.    {
  633.       if(!_loc1_.halt)
  634.       {
  635.          core.s_timer.setVolume(Math.ceil(40 * ((showCount + 1) / nextClips.length)));
  636.          core.s_timer.start(0,1);
  637.       }
  638.       nextClips[showCount]._alpha = 100;
  639.       showCount++;
  640.    }
  641.    if(++tick > tickDelay)
  642.    {
  643.       if(linesLeft > 1)
  644.       {
  645.          tick = 0;
  646.          _loc1_.model.addRow();
  647.          if(!skullAdvance)
  648.          {
  649.             linesLeft--;
  650.             updateText();
  651.          }
  652.          skullAdvance = false;
  653.       }
  654.       else if(++btwLevelDelayCount < btwLevelDelay)
  655.       {
  656.          halt = true;
  657.          feedBack._visible = true;
  658.          feedBack.gotoAndStop("levelComplete");
  659.       }
  660.       else
  661.       {
  662.          model.endGame = false;
  663.          btwLevelDelayCount = 0;
  664.          tick = 0;
  665.          level++;
  666.          tickDelay = updateTickDelay();
  667.          linesleft = 8 + level;
  668.          updateText();
  669.          _loc1_.model.reset(level);
  670.          feedBack._visible = false;
  671.          _loc1_.prompter._visible = 1;
  672.          _loc1_.prompter.gotoAndPlay(1);
  673.          delete _loc1_.onEnterFrame;
  674.       }
  675.    }
  676. };
  677. startGame = function()
  678. {
  679.    var _loc1_ = this;
  680.    _loc1_.pauseButton._visible = 1;
  681.    _loc1_.infoButton._visible = 1;
  682.    _loc1_.paused = false;
  683.    _loc1_.halt = false;
  684.    _loc1_.onEnterFrame = _loc1_.mainLoop;
  685. };
  686. gameOver = function()
  687. {
  688.    feedBack._visible = 1;
  689.    feedBack.gotoAndStop("gameOver");
  690.    halt = true;
  691.    tick = 0;
  692.    tickDelay = updateTickDelay();
  693.    skullAdvance = false;
  694.    btwLevelDelayCount = 0;
  695.    btwLevelDelay = 90;
  696.    showCount = 0;
  697.    begun = false;
  698.    startButton._visible = 1;
  699.    pauseButton._visible = 0;
  700.    delete this.onEnterFrame;
  701. };
  702. instructions._visible = prompter._visible = pauseButton._visible = resumeButton._visible = highlight._visible = feedback._visible = 0;
  703. startButton.onRollOver = startScreen.onRollOver = function()
  704. {
  705.    highLight._visible = 1;
  706. };
  707. pauseButton.onRollOver = resumeButton.onRollOver = function()
  708. {
  709.    if(!this._parent.halt)
  710.    {
  711.       highLight._visible = 1;
  712.    }
  713. };
  714. startButton.onRollOut = startButton.onReleaseOutside = pauseButton.onRollOut = pauseButton.onReleaseOutside = resumeButton.onRollOut = resumeButton.onReleaseOutside = startScreen.onReleaseOutside = startScreen.onRollOut = function()
  715. {
  716.    highLight._visible = 0;
  717. };
  718. startButton.onRelease = startScreen.onRelease = function()
  719. {
  720.    var _loc1_ = this;
  721.    _loc1_._parent.startscreen.visible = _loc1_._parent.startButton._visible = 0;
  722.    _loc1_._parent.startScreen._visible = 0;
  723.    _loc1_._parent.feedBack._visible = 0;
  724.    _loc1_._parent.prompter._visible = 1;
  725.    _loc1_._parent.instructions._visible = 0;
  726.    _loc1_._parent.level = 0;
  727.    _loc1_._parent.score = 0;
  728.    _loc1_._parent.linesleft = 8;
  729.    _loc1_._parent.updateText();
  730.    _loc1_._parent.begun = true;
  731.    if(!starter)
  732.    {
  733.       starter = true;
  734.       _loc1_._parent.init();
  735.    }
  736.    else
  737.    {
  738.       _loc1_._parent.model.reset(0);
  739.    }
  740.    _loc1_._parent.prompter.gotoAndPlay(1);
  741. };
  742. pauseButton.onRelease = function()
  743. {
  744.    var _loc1_ = this;
  745.    if(!_loc1_._parent.halt)
  746.    {
  747.       _loc1_._parent.resumeButton._visible = 1;
  748.       _loc1_._visible = 0;
  749.       _loc1_._parent.feedback._visible = 1;
  750.       _loc1_._parent.paused = true;
  751.       _loc1_._parent.feedback.gotoAndStop("paused");
  752.       delete _loc1_._parent.onEnterFrame;
  753.    }
  754. };
  755. resumeButton.onRelease = function()
  756. {
  757.    var _loc1_ = this;
  758.    if(!_loc1_._parent.halt)
  759.    {
  760.       _loc1_._parent.pauseButton._visible = 1;
  761.       _loc1_._parent.paused = false;
  762.       _loc1_._visible = 0;
  763.       _loc1_._parent.feedback._visible = _loc1_._parent.instructions._visible = 0;
  764.       _loc1_._parent.onEnterFrame = _loc1_._parent.mainLoop;
  765.    }
  766. };
  767. infoButton.onRelease = function()
  768. {
  769.    var _loc1_ = this;
  770.    if(!_loc1_._parent.halt)
  771.    {
  772.       _loc1_._parent.resumeButton._visible = 1;
  773.       _loc1_._parent.paused = true;
  774.       _loc1_._parent.instructions._visible = 1;
  775.       delete _loc1_._parent.onEnterFrame;
  776.    }
  777.    else if(!_loc1_._parent.begun)
  778.    {
  779.       _loc1_._parent.instructions._visible = 1;
  780.    }
  781. };
  782.